/**
 * 项目共享API接口
 * 处理与项目共享相关的请求
 */
const userShareService = require('../userShareService');
const userAuthService = require('../userAuth');

// 处理获取共享项目列表的请求
exports.getSharedProjects = async (req, res) => {
  try {
    // 获取共享项目列表
    const sharedProjects = await userShareService.getSharedProjects(true);
    
    res.json({
      success: true,
      data: sharedProjects
    });
  } catch (error) {
    console.error('[ShareAPI] 获取共享项目列表失败:', error);
    res.status(500).json({
      success: false,
      message: '获取共享项目列表失败: ' + error.message
    });
  }
};

// 处理分享项目的请求
exports.shareProject = async (req, res) => {
  try {
    const { projectId } = req.params;
    
    if (!projectId) {
      return res.status(400).json({
        success: false,
        message: '缺少项目ID参数'
      });
    }
    
    // 执行分享操作
    const success = await userShareService.shareProject(projectId);
    
    if (success) {
      res.json({
        success: true,
        data: {
          projectId,
          shared: true,
          timestamp: new Date().toISOString()
        },
        message: '项目分享成功'
      });
    } else {
      res.status(500).json({
        success: false,
        message: '项目分享失败，请稍后重试'
      });
    }
  } catch (error) {
    console.error('[ShareAPI] 分享项目失败:', error);
    res.status(500).json({
      success: false,
      message: '分享项目失败: ' + error.message
    });
  }
};

// 处理取消分享项目的请求
exports.unshareProject = async (req, res) => {
  try {
    const { projectId } = req.params;
    
    if (!projectId) {
      return res.status(400).json({
        success: false,
        message: '缺少项目ID参数'
      });
    }
    
    // 执行取消分享操作
    const success = await userShareService.unshareProject(projectId);
    
    if (success) {
      res.json({
        success: true,
        data: {
          projectId,
          shared: false,
          timestamp: new Date().toISOString()
        },
        message: '项目取消分享成功'
      });
    } else {
      res.status(500).json({
        success: false,
        message: '项目取消分享失败，请稍后重试'
      });
    }
  } catch (error) {
    console.error('[ShareAPI] 取消分享项目失败:', error);
    res.status(500).json({
      success: false,
      message: '取消分享项目失败: ' + error.message
    });
  }
};

// 处理导入共享项目的请求
exports.importSharedProject = async (req, res) => {
  try {
    const { projectId } = req.params;
    
    if (!projectId) {
      return res.status(400).json({
        success: false,
        message: '缺少项目ID参数'
      });
    }
    
    // 执行导入操作
    const success = await userShareService.importSharedProject(projectId);
    
    if (success) {
      res.json({
        success: true,
        data: {
          projectId,
          imported: true,
          timestamp: new Date().toISOString()
        },
        message: '导入共享项目成功'
      });
    } else {
      res.status(500).json({
        success: false,
        message: '导入共享项目失败，请稍后重试'
      });
    }
  } catch (error) {
    console.error('[ShareAPI] 导入共享项目失败:', error);
    res.status(500).json({
      success: false,
      message: '导入共享项目失败: ' + error.message
    });
  }
};

// 处理获取合并数据的请求
exports.getMergedData = async (req, res) => {
  try {
    // 获取查询参数
    const includeShared = req.query.includeShared !== 'false';
    
    // 获取合并数据
    const mergedData = await userShareService.getMergedData(includeShared);
    
    res.json({
      success: true,
      data: mergedData
    });
  } catch (error) {
    console.error('[ShareAPI] 获取合并数据失败:', error);
    res.status(500).json({
      success: false,
      message: '获取合并数据失败: ' + error.message
    });
  }
};

// 处理获取当前用户信息的请求
exports.getCurrentUser = async (req, res) => {
  try {
    // 获取当前用户ID
    const userId = userShareService.getCurrentUserId();
    
    res.json({
      success: true,
      data: {
        userId,
        timestamp: new Date().toISOString()
      }
    });
  } catch (error) {
    console.error('[ShareAPI] 获取当前用户信息失败:', error);
    res.status(500).json({
      success: false,
      message: '获取当前用户信息失败: ' + error.message
    });
  }
};

// 用户认证API

// 处理用户登录
exports.login = async (req, res) => {
  try {
    const { username, password } = req.body;
    
    if (!username || !password) {
      return res.status(400).json({
        success: false,
        message: '用户名和密码不能为空'
      });
    }
    
    // 执行登录验证
    const user = await userAuthService.login(username, password);
    
    if (user) {
      res.json({
        success: true,
        data: user,
        message: '登录成功'
      });
    } else {
      res.status(401).json({
        success: false,
        message: '用户名或密码错误'
      });
    }
  } catch (error) {
    console.error('[ShareAPI] 用户登录失败:', error);
    res.status(500).json({
      success: false,
      message: '用户登录失败: ' + error.message
    });
  }
};

// 处理获取用户列表
exports.getUsers = async (req, res) => {
  try {
    // TODO: 添加权限检查，只有管理员可以获取用户列表
    
    const users = await userAuthService.getUsers();
    
    // 过滤掉敏感信息
    const safeUsers = users.map(user => {
      const { passwordHash, ...safeUser } = user;
      return safeUser;
    });
    
    res.json({
      success: true,
      data: safeUsers
    });
  } catch (error) {
    console.error('[ShareAPI] 获取用户列表失败:', error);
    res.status(500).json({
      success: false,
      message: '获取用户列表失败: ' + error.message
    });
  }
};

// 处理创建用户
exports.createUser = async (req, res) => {
  try {
    const userData = req.body;
    
    if (!userData.username || !userData.password) {
      return res.status(400).json({
        success: false,
        message: '用户名和密码不能为空'
      });
    }
    
    // 执行创建操作
    const newUser = await userAuthService.createUser(userData);
    
    if (newUser) {
      res.json({
        success: true,
        data: newUser,
        message: '用户创建成功'
      });
    } else {
      res.status(500).json({
        success: false,
        message: '用户创建失败，用户名可能已存在'
      });
    }
  } catch (error) {
    console.error('[ShareAPI] 创建用户失败:', error);
    res.status(500).json({
      success: false,
      message: '创建用户失败: ' + error.message
    });
  }
};

// 处理更新用户
exports.updateUser = async (req, res) => {
  try {
    const { userId } = req.params;
    const userData = req.body;
    
    if (!userId) {
      return res.status(400).json({
        success: false,
        message: '缺少用户ID参数'
      });
    }
    
    // 执行更新操作
    const updatedUser = await userAuthService.updateUser(userId, userData);
    
    if (updatedUser) {
      res.json({
        success: true,
        data: updatedUser,
        message: '用户更新成功'
      });
    } else {
      res.status(500).json({
        success: false,
        message: '用户更新失败'
      });
    }
  } catch (error) {
    console.error('[ShareAPI] 更新用户失败:', error);
    res.status(500).json({
      success: false,
      message: '更新用户失败: ' + error.message
    });
  }
};

// 处理删除用户
exports.deleteUser = async (req, res) => {
  try {
    const { userId } = req.params;
    
    if (!userId) {
      return res.status(400).json({
        success: false,
        message: '缺少用户ID参数'
      });
    }
    
    // 执行删除操作
    const success = await userAuthService.deleteUser(userId);
    
    if (success) {
      res.json({
        success: true,
        data: { userId },
        message: '用户删除成功'
      });
    } else {
      res.status(500).json({
        success: false,
        message: '用户删除失败，可能是最后一个管理员用户'
      });
    }
  } catch (error) {
    console.error('[ShareAPI] 删除用户失败:', error);
    res.status(500).json({
      success: false,
      message: '删除用户失败: ' + error.message
    });
  }
};
